Next.js Draft Mode๋ก ์ํํ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๊ฒฝํํ์ธ์. ์ฝํ ์ธ ์ ์์์ ์ญ๋์ ๊ฐํํ๊ณ , ํ์ ์ ๊ฐ์ ํ๋ฉฐ, ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์ฝํ ์ธ ํ์ง์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
Next.js Draft Mode: ๊ธ๋ก๋ฒ ํ์ ์ํ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ฐ์ํ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ํ๊ฒฝ์์ ๊ณ ํ์ง์ ๋งค๋ ฅ์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ฑ๊ณต์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ, ์ด๋ ์ข ์ข ์ฌ๋ฌ ํ๋ซํผ์ ๊ฑธ์ณ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค์ํ ์ธ์ด์ ์ง์ญ์์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. Next.js Draft Mode๋ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ํฌํ๋ก์ฐ๋ฅผ ๊ฐ์ํํ๊ณ , ์ฝํ ์ธ ์ ์์์ ์ญ๋์ ๊ฐํํ๋ฉฐ, ํ์ ์ ๊ฐ์ ํ๋ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค.
Next.js Draft Mode๋ ๋ฌด์์ธ๊ฐ์?
Next.js Draft Mode๋ฅผ ์ฌ์ฉํ๋ฉด Next.js์ ์ ์ ์์ฑ(static generation) ๋๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ฐํํ๊ณ ํ์ด์ง๋ฅผ ์จ๋๋งจ๋(on-demand)๋ก ๋ ๋๋งํ ์ ์์ด, ์ฝํ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒ์ํ๊ธฐ ์ ์ ์ค์๊ฐ์ผ๋ก ๋ฏธ๋ฆฌ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ ์ฝํ ์ธ ์ ๋ฐ์ดํธ๋ฅผ ๋ผ์ด๋ธ๋ก ์ ํํ๊ธฐ ์ ์ ๊ฒํ ํ๊ณ ์น์ธํด์ผ ํ๋ ์ฝํ ์ธ ๊ด๋ฆฌ ์์คํ (CMS)๊ณผ ํจ๊ป ์์ ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
๋์ฟ์ ๋ง์ผํ ํ์ด ๋ถ๋ฏธ ๊ณ ๊ฐ์ ๋์์ผ๋ก ํ๋ ์น์ฌ์ดํธ์ ํํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ธ์. Draft Mode๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์์ด ์ฝํ ์ธ ๊ฐ ์ ํํ๊ณ , ๋งค๋ ฅ์ ์ด๋ฉฐ, ๋ฌธํ์ ์ผ๋ก ์ ์ ํ์ง ๊ฒ์ํ๊ธฐ ์ ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ค์๊ฐ ํผ๋๋ฐฑ ๋ฃจํ๋ ์ค๋ฅ์ ์ํ์ ํฌ๊ฒ ์ค์ด๊ณ ์ฝํ ์ธ ์ ์ ๋ฐ์ ์ธ ํ์ง์ ํฅ์์ํต๋๋ค.
Next.js Draft Mode ์ฌ์ฉ์ ์ด์
Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ Draft Mode๋ฅผ ๊ตฌํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ฃผ์ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ์ฝํ ์ธ ํ์ง ํฅ์: ์ฝํ ์ธ ์ ์์๋ ์ค์ ์ ๊ฐ์ ํ๊ฒฝ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฏธ๋ฆฌ ๋ณด๊ณ , ์ผ๋ฐ์ ๊ณต๊ฐ๋๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์์ ํ ์ ์์ต๋๋ค.
- ํ์ ๊ฐํ: Draft Mode๋ ์ฝํ ์ธ ์ ์์, ํธ์ง์, ๊ฐ๋ฐ์ ๊ฐ์ ํ์ ์ ์ด์งํ์ฌ ๋ชจ๋ ์ฌ๋์ด ๊ฐ์ ๋ด์ฉ์ ๊ณต์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋ ๋น ๋ฅธ ์ฝํ ์ธ ์ ๋ฐ์ดํธ: ๋ณ๊ฒฝ ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋ ๊ธฐ๋ฅ์ ์ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถ์ํต๋๋ค.
- ์ค๋ฅ ์ํ ๊ฐ์: ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํจ์ผ๋ก์จ Draft Mode๋ ๋ถ์ ํํ๊ฑฐ๋ ์คํด์ ์์ง๊ฐ ์๋ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ํ ์ํ์ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๊ฐ์ํ๋ ์ํฌํ๋ก์ฐ: Draft Mode๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ CMS ํ๋ซํผ๊ณผ ์ํํ๊ฒ ํตํฉ๋์ด ์ฝํ ์ธ ์ ์ ๋ฐ ๊ฒ์ ์ํฌํ๋ก์ฐ๋ฅผ ๋จ์ํํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ์ฝํ ์ธ ๊ด๋ฆฌ: ๋ค์ํ ์ง์ญ์ ์ฝํ ์ธ ๋ฅผ ๊ด๋ฆฌํ ๋ ํ์์ ์ธ Draft Mode๋ ์ ์ธ๊ณ ํ์ด ๋ฐฐํฌ ์ ์ ๋ฒ์ญ ๋ฐ ๋ฌธํ์ ๊ฐ์์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ ์ ์๊ฒ ํด์ค๋๋ค.
Next.js Draft Mode ๊ตฌํ ๋ฐฉ๋ฒ
Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ Draft Mode๋ฅผ ๊ตฌํํ๋ ๋ฐ๋ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
1. CMS ๊ตฌ์ฑํ๊ธฐ
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ Draft Mode๋ฅผ ์ง์ํ๋๋ก CMS๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. Contentful, Sanity, Strapi์ ๊ฐ์ ๋๋ถ๋ถ์ ์ต์ ํค๋๋ฆฌ์ค CMS ํ๋ซํผ์ Draft Mode์ ๋ํ ๋ด์ฅ ์ง์์ ์ ๊ณตํฉ๋๋ค. ํ์ฑํ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ง์นจ์ CMS ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด Contentful์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ์ ์ํ ๋ณ๋์ API ํค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด API ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ผ์ด๋ธ ํ๊ฒฝ์ ์ํฅ์ ์ฃผ์ง ์๊ณ Contentful์์ ์ด์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
2. Draft Mode ํ์ฑํ๋ฅผ ์ํ API ๋ผ์ฐํธ ์์ฑํ๊ธฐ
๋ค์์ผ๋ก, Next.js ์ ํ๋ฆฌ์ผ์ด์ ์์ Draft Mode๋ฅผ ํ์ฑํํ๋ API ๋ผ์ฐํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด ๋ผ์ฐํธ๋ ์ผ๋ฐ์ ์ผ๋ก CMS๋ก๋ถํฐ ๋น๋ฐ ํ ํฐ์ ๋ฐ์ ์น์ธ๋ ์ฌ์ฉ์๋ง Draft Mode์ ๋ค์ด๊ฐ ์ ์๋๋ก ํฉ๋๋ค.
๋ค์์ Draft Mode๋ฅผ ํ์ฑํํ๋ API ๋ผ์ฐํธ์ ์์์ ๋๋ค:
// pages/api/draft.js
import { enablePreview } from '../../utils/draft'
export default async function handler(req, res) {
// ๋น๋ฐ ํ ํฐ๊ณผ ์ฌ๋ฌ๊ทธ๋ฅผ ํ์ธํฉ๋๋ค
// ์ด ๋น๋ฐ ํ ํฐ์ ์ด API ๋ผ์ฐํธ์ CMS๋ง ์๊ณ ์์ด์ผ ํฉ๋๋ค.
if (req.query.secret !== process.env.CONTENTFUL_PREVIEW_SECRET) {
return res.status(401).json({ message: 'Invalid token' })
}
// ์ฟ ํค๋ฅผ ์ค์ ํ์ฌ Draft Mode๋ฅผ ํ์ฑํํฉ๋๋ค
res.setPreviewData({})
// Draft Mode ํ์ฑํ ํ ํํ์ด์ง๋ก ๋ฆฌ๋๋ ์
ํฉ๋๋ค
res.redirect('/')
res.end()
}
์ด ์ฝ๋ ์ค๋ํซ์ ๊ธฐ๋ณธ์ ์ธ API ์๋ํฌ์ธํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ์ค์ํ ์ ์ `CONTENTFUL_PREVIEW_SECRET` ํ๊ฒฝ ๋ณ์๊ฐ ์์ฒญ์ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์์ ๋น๊ต๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ฝ ์ผ์นํ๋ฉด, `res.setPreviewData({})`๊ฐ ์ฟ ํค๋ฅผ ํตํด Draft Mode๋ฅผ ํ์ฑํํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ์ฌ์ฉ์๋ ํํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
3. ์ด์ ์ฝํ ์ธ ๊ฐ์ ธ์ค๊ธฐ
์ด์ Draft Mode๋ฅผ ํ์ฑํํ์ผ๋ฏ๋ก, Draft Mode๊ฐ ํ์ฑํ๋์์ ๋ ์ด์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ก์ง์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. `getStaticProps` ๋๋ `getServerSideProps`์์ ์ ๊ณตํ๋ `preview` prop์ ์ฌ์ฉํ์ฌ Draft Mode๊ฐ ํ์ฑํ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
`getStaticProps`์์ ์ด์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
export async function getStaticProps({ preview = false }) {
const post = await getPostBySlug(slug, preview)
return {
props: {
post,
preview,
},
}
}
์ด ์์ ์์ `getPostBySlug` ํจ์๋ `preview` prop์ด `true`๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ด์ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. `preview` prop์ Draft Mode๊ฐ ํ์ฑํ๋๋ฉด `getStaticProps`์ ์๋์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค.
`getPostBySlug` ๋ด๋ถ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์ ํญ๋ชฉ์ ํฌํจํ๋๋ก CMS ์ฟผ๋ฆฌ๋ฅผ ์์ ํฉ๋๋ค. Contentful์ ๊ฒฝ์ฐ, ์ด๋ API ์์ฒญ์ `preview: true`๋ฅผ ํฌํจํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
4. ์ด์ ์ฝํ ์ธ ํ์ํ๊ธฐ
๋ง์ง๋ง์ผ๋ก, Draft Mode๊ฐ ํ์ฑํ๋์์ ๋ ์ด์ ์ฝํ ์ธ ๋ฅผ ํ์ํ๋๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. `preview` prop์ ์ฌ์ฉํ์ฌ Draft Mode ํ์ฑํ ์ฌ๋ถ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก ๋ค๋ฅธ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋งํ ์ ์์ต๋๋ค.
React ์ปดํฌ๋ํธ์์ ์ด์ ์ฝํ ์ธ ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
function Post({ post, preview }) {
return (
{post.title}
{preview && (
Draft Mode ํ์ฑํ๋จ
)}
{post.content}
)
}
์ด ์ฝ๋ ์ค๋ํซ์ `preview` prop์ ํ์ธํฉ๋๋ค. ๋ง์ฝ true์ด๋ฉด, Draft Mode๊ฐ ํ์ฑํ๋์์์ ๋ํ๋ด๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝํ ์ธ ์ ์์๋ ์ด์๊ณผ ๊ฒ์๋ ์ฝํ ์ธ ๋ฅผ ๋ช ํํ๊ฒ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
์์: ๊ธ๋ก๋ฒ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ์ฝํ ์ธ ๊ด๋ฆฌ
์ฌ๋ฌ ๊ตญ๊ฐ์์ ์ ํ์ ํ๋งคํ๋ ๊ธ๋ก๋ฒ ์ด์ปค๋จธ์ค ํ๋ซํผ์ ์๊ฐํด ๋ณด์ธ์. ์ด ํ๋ซํผ์ ๋ค์ํ ์ธ์ด๋ก ์ ํ ์ค๋ช , ํ๋ก๋ชจ์ ๋ฐฐ๋, ๋ง์ผํ ์บ ํ์ธ์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
Next.js Draft Mode๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์ง์ญ์ ์ฝํ ์ธ ์ ์์๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒ์ํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์์ด, ์ฝํ ์ธ ๊ฐ ์ ํํ๊ณ ๋ฌธํ์ ์ผ๋ก ์ ์ ํ๋ฉฐ ํ๊ฒ ๊ณ ๊ฐ์ ์ต์ ํ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ๋์ค์ ๋ง์ผํ ํ์ ํ๋์ค์ด๋ก ๋ ํ๋ก๋ชจ์ ๋ฐฐ๋๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ณ , ๋ฒ์ญ์ด ์ ํํ๊ณ ๋ฉ์์ง๊ฐ ํ๋์ค ๊ณ ๊ฐ์๊ฒ ๊ณต๊ฐ์ ์ป๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ์ผ๋ณธ์ ์ ํ ๊ด๋ฆฌ์๋ ์ผ๋ณธ์ด๋ก ๋ ์ ํ ์ค๋ช ์ ๋ฏธ๋ฆฌ ๋ณด๊ณ , ์ ํ ์ธ๋ถ ์ ๋ณด๊ฐ ์ ํํ๊ณ ํค์ด ์ผ๋ณธ ์์ฅ์ ์ ํฉํ์ง ํ์ธํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ง์ ์ฝํ ์ธ ํธ์ง์๋ ํฌ๋ฅดํฌ๊ฐ์ด๋ก ๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ฏธ๋ฆฌ ๋ณด๊ณ , ๋ฌธ๋ฒ๊ณผ ์ฒ ์๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ ์ ์์ต๋๋ค.
์ง์ญ ํ์ด ๊ฒ์ ์ ์ ์ฝํ ์ธ ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๊ฒ ํจ์ผ๋ก์จ, Draft Mode๋ ํ๋ซํผ์ด ์ ์ธ๊ณ ๊ณ ๊ฐ์๊ฒ ์ผ๊ด๋๊ณ ๊ณ ํ์ง์ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ๋์ต๋๋ค.
Next.js Draft Mode ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Next.js Draft Mode๋ฅผ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์:
- ๊ฐ๋ ฅํ ๋น๋ฐ ํ ํฐ ์ฌ์ฉ: ๊ฐ๋ ฅํ ๋น๋ฐ ํ ํฐ์ผ๋ก API ๋ผ์ฐํธ๋ฅผ ๋ณดํธํ์ฌ ์น์ธ๋์ง ์์ ์ฌ์ฉ์๊ฐ Draft Mode์ ๋ค์ด์ค๋ ๊ฒ์ ๋ฐฉ์งํ์ธ์.
- ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ์ ์ํ ๋ณ๋์ API ํค ๊ตฌ์ฑ: ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ ํ๋ก๋์ ํ๊ฒฝ์ ๋ํด ๋ณ๋์ API ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ์ธ์.
- Draft Mode๊ฐ ํ์ฑํ๋์์ ๋ ๋ช ํํ๊ฒ ํ์: Draft Mode๊ฐ ํ์ฑํ๋์์ ๋ ์ฝํ ์ธ ์ ์์์๊ฒ ๋ช ํํ ๋ฉ์์ง๋ฅผ ํ์ํ์ฌ ์ด์ ์ฝํ ์ธ ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ณ ์์์ ์๋ฆฌ์ธ์.
- Draft Mode ๊ตฌํ์ ์ฒ ์ ํ ํ ์คํธ: Draft Mode ๊ตฌํ์ ํ ์คํธํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์ฝํ ์ธ ์ ์์๊ฐ ์์๋๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋์ง ํ์ธํ์ธ์.
- ์ ์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ ์ฌ์ฉ ๊ณ ๋ ค: ๋๊ท๋ชจ ํ์ ๊ฒฝ์ฐ ํ๋ก๋์ ํ๊ฒฝ์ ๋ฏธ๋ฌ๋งํ๋ ์ ์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ์ ์ค์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ด๋ ๋ ํ์ค์ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ฒฝํ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
- ์ฝํ ์ธ ์น์ธ์ ์ํ ๋ช ํํ ์ํฌํ๋ก์ฐ ์๋ฆฝ: ๋ชจ๋ ์ฝํ ์ธ ๊ฐ ๊ฒ์๋๊ธฐ ์ ์ ๊ฒํ ๋ฐ ์น์ธ๋๋๋ก ๋ช ํํ ์ฝํ ์ธ ์น์ธ ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ํ์ธ์.
- ์ฝํ ์ธ ์ ์์์๊ฒ Draft Mode ์ฌ์ฉ๋ฒ ๊ต์ก: ์ฝํ ์ธ ์ ์์์๊ฒ Draft Mode๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ต์ก์ ์ ๊ณตํ์ธ์. ์ด๋ ๊ทธ๋ค์ด ์ด ๊ธฐ๋ฅ์ ์ต๋ํ ํ์ฉํ๊ณ ์ค๋ฅ์ ์ํ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ธ ๊ณผ์ ์ ํด๊ฒฐ์ฑ
Next.js Draft Mode๋ ์๋ง์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ตฌํ ์ค์ ๋ง์ฃผ์น ์ ์๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ณผ์ ๋ ์์ต๋๋ค:
- ์บ์ ๋ฌดํจํ: ์ฝํ ์ธ ๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ์บ์๊ฐ ์ ๋๋ก ๋ฌดํจํ๋๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ์ ์์ต๋๋ค. ์ฆ๋ถ ์ ์ ์ฌ์์ฑ(ISR) ๋๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํญ์ ์ต์ ์ฝํ ์ธ ๊ฐ ํ์๋๋๋ก ํ์ธ์.
- ์ธ์ฆ ๋ฐ ์ธ๊ฐ: Draft Mode API ๋ผ์ฐํธ๋ฅผ ๋ณดํธํ๊ณ ์น์ธ๋ ์ฌ์ฉ์๋ง ์ด์ ์ฝํ ์ธ ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฝํ ์ธ ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์ธ์ฆ ๋ฐ ์ธ๊ฐ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ์ธ์.
- ์ฑ๋ฅ ์ต์ ํ: ์ด์ ์ฝํ ์ธ ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๋ ๊ฒ์ ํนํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ณต์กํ ํ์ด์ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ฒฝํ์ด ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ์ข๋๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ ๋๋ง ๋ก์ง์ ์ต์ ํํ์ธ์.
- ์๋ํํฐ ์๋น์ค์์ ํตํฉ: Draft Mode๋ฅผ ๋ถ์์ด๋ ๊ฒ์ ์์ง๊ณผ ๊ฐ์ ์๋ํํฐ ์๋น์ค์ ํตํฉํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋น์ค๊ฐ ์ด์ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฒ๋ฆฌ: CMS์์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ด์ ์ฝํ ์ธ ๋ฅผ ์ ๋๋ก ํ์ํ๊ธฐ ์ํด ์ฌ์ฉ์ ์ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ์๋ ์์ต๋๋ค. ์ปดํฌ๋ํธ์์ ์ค์ฒฉ๋ ๋ฐ์ดํฐ์ ๊ด๊ณ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ธ์.
Next.js Draft Mode์ ๋์
Next.js Draft Mode๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด์ง๋ง, ๊ณ ๋ คํด ๋ณผ ๋งํ ๋ค๋ฅธ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ทผ ๋ฐฉ์๋ ์์ต๋๋ค:
- ์ ์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ: ํ๋ก๋์ ํ๊ฒฝ์ ๋ฏธ๋ฌ๋งํ๋ ๋ณ๋์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ๊ฒฝ์ ์ค์ ํ๋ฉด ๋ ํ์ค์ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํ์ด ๋ ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ํค๋๋ฆฌ์ค CMS ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ: ๋ง์ ํค๋๋ฆฌ์ค CMS ํ๋ซํผ์ ์์ฒด ๋ด์ฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ Next.js๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ํด CMS์ ์์กดํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ ์ข์ ์ต์ ์ด ๋ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ง์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์๋ฃจ์ : CMS API์ Next.js๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ง์ ์ฌ์ฉ์ ์ง์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์๋ฃจ์ ์ ๊ตฌ์ถํ ์๋ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง ๋ ๋ง์ ๊ฐ๋ฐ ๋ ธ๋ ฅ์ด ํ์ํฉ๋๋ค.
๊ฒฐ๋ก
Next.js Draft Mode๋ ์ฝํ ์ธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ํฌํ๋ก์ฐ๋ฅผ ๊ฐ์ํํ๊ณ , ์ฝํ ์ธ ์ ์์์ ์ญ๋์ ๊ฐํํ๋ฉฐ, ๊ธ๋ก๋ฒ ํ์ ํ์ ์ ๊ฐ์ ํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค. Draft Mode๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ์ฝํ ์ธ ๊ฐ ๊ฒ์๋๊ธฐ ์ ์ ์ ํํ๊ณ , ๋งค๋ ฅ์ ์ด๋ฉฐ, ๋ฌธํ์ ์ผ๋ก ์ ์ ํ์ง ํ์ธํ ์ ์์ผ๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ํฅ์๋ ๋น์ฆ๋์ค ์ฑ๊ณผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ์ผ๋ฐ์ ์ธ ๊ณผ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ Next.js Draft Mode์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ์ฝํ ์ธ ์ ์ ํ๋ก์ธ์ค๋ฅผ ํ์ ํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํ์ ์ํ ์ํํ๊ณ ํจ์จ์ ์ธ ์ฝํ ์ธ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ํญ์ ๋ณด์, ์ฑ๋ฅ, ๊ทธ๋ฆฌ๊ณ ๋ช ํํ ์ฝํ ์ธ ์น์ธ ์ํฌํ๋ก์ฐ๋ฅผ ์ฐ์ ์ํ๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์.